uqmid: modem_fsm: implement re-transmission of GET IMSI calls
authorAlexander Couzens <[email protected]>
Tue, 13 Aug 2024 21:04:59 +0000 (23:04 +0200)
committerDavid Bauer <[email protected]>
Sat, 31 May 2025 20:41:00 +0000 (22:41 +0200)
Signed-off-by: Alexander Couzens <[email protected]>
uqmid/modem_fsm.c

index 447e74e7547a60edd34989d7b9fed96e4a9048f8..b85f53820a7e02eab8549d62a81a044a2e9ab5a1 100644 (file)
@@ -461,7 +461,7 @@ static void dms_get_imsi_cb(struct qmi_service *service, struct qmi_request *req
        osmo_fsm_inst_dispatch(modem->fi, MODEM_EV_RX_IMSI, NULL);
 }
 
-static void modem_st_get_imsi_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)
+static void tx_get_imsi_req(struct osmo_fsm_inst *fi, uint32_t old_state)
 {
        struct modem *modem = fi->priv;
        struct qmi_service *uim = uqmi_service_find(modem->qmi, QMI_SERVICE_UIM);
@@ -485,6 +485,12 @@ static void modem_st_get_imsi_onenter(struct osmo_fsm_inst *fi, uint32_t old_sta
        }
 }
 
+static void modem_st_get_imsi_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)
+{
+       fi->N = 0;
+       tx_get_imsi_req(fi, old_state);
+}
+
 static void modem_st_get_imsi(struct osmo_fsm_inst *fi, uint32_t event, void *data)
 {
        struct modem *modem = fi->priv;
@@ -1185,6 +1191,11 @@ static int modem_fsm_timer_cb(struct osmo_fsm_inst *fi)
                uqmi_service_send_simple(service, qmi_set_nas_get_serving_system_request, get_serving_system_cb, modem);
                osmo_timer_schedule(&fi->timer, NAS_SERVICE_POLL_TIMEOUT_S, 0);
                break;
+       case MODEM_ST_GET_IMSI:
+               fi->N++;
+               tx_get_imsi_req(fi, MODEM_ST_GET_IMSI);
+               osmo_timer_schedule(&fi->timer, NAS_SERVICE_POLL_TIMEOUT_S, 0);
+               break;
        case MODEM_ST_START_IFACE:
                switch (fi->T) {
                case N_RESEND: